﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using KBManagement.DAL;
using KBManagement.Library;

namespace KBManagement
{
    public partial class ExportStore : Form
    {
        KBSQLClassDataContext context;
        private Store store;
        Store aStore;
        public ExportStore(Store store)
        {
            this.store = store;
            context = Utils.CreateInstance().GetDBContext();
            InitializeComponent();
            lblUnit.Text = store.Unit;
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            aStore = context.Stores.SingleOrDefault(sto => sto.ID == store.ID);
            bool isValid = validate();
            if (isValid)
            {
                context = Utils.CreateInstance().GetDBContext();
                ConfirmExport confirm = new ConfirmExport(store.S_Name, txtAmount.Text + " " + lblUnitExport.Text + " " + lblUnit.Text);
                if (confirm.ShowDialog() == DialogResult.OK)
                {
                    Export();
                    UpdateStoreTemp();
                    InsertStockLog(false, Convert.ToDouble(txtAmount.Text), Convert.ToDecimal("0"));
                    context.SubmitChanges();
                    MessageBox.Show("Nhân viên A lấy từ kho ra " + txtAmount.Text + " " + lblUnitExport.Text + " " + store.S_Name);
                    Utils.CreateInstanceLog().TransactionLogCommon("Nhân viên " + AdminSession.admin.UserName + " lấy từ kho ra " + txtAmount.Text + " " + store.Unit + " " + store.S_Name+" vào lúc " + DateTime.Now);
                    Utils.CreateInstance().NotificationInforObserver();
                    txtAmount.Text = "";
                    Close();
                }
            }
        }


        public Boolean validate()
        {
            if (Utils.CreateInstance().isNull(txtAmount.Text))
            {
                MessageBox.Show("Hãy điền vào số lượng");
                return false;
            }
            if (!Utils.CreateInstance().isNumberDouble(txtAmount.Text))
            {
                MessageBox.Show("Số lượng không đúng định dạng");
                return false;
            }
            if (Convert.ToDouble(txtAmount.Text) <= 0)
            {
                MessageBox.Show("Số lượng phải lớn hơn 0");
                return false;
            }
            if (aStore.Quantity <= 0)
            {
                MessageBox.Show("Trong kho đã hết hàng");
                return false;
            }
            if (aStore.Quantity < Convert.ToDouble(txtAmount.Text))
            {
                MessageBox.Show("Trong kho còn ít hơn số lượng bạn lấy");
                return false;
            }

            return true;
        }

        private void UpdateStoreTemp()
        {
            StoreTemp sTemp = context.StoreTemps.SingleOrDefault(x => x.StoID == store.ID);
            sTemp.Quantity = sTemp.Quantity + Convert.ToDouble(txtAmount.Text);
            sTemp.Warning = "";
        }

        private void Export()
        {
            aStore.Quantity = aStore.Quantity - Convert.ToDouble(txtAmount.Text);
        }


        private void InsertStockLog(Boolean type, Double quantity, Decimal price)
        {
            Random random = new Random();
            var storeLog = new Store_Log
            {
                ID = random.Next().ToString(),
                Price = price,
                Quantity = quantity,
                TransferDate = Convert.ToDateTime(DateTime.Now.ToShortDateString()),
                TypeIE = type,
                StoreID = store.ID
            };
            context.Store_Logs.InsertOnSubmit(storeLog);
        }
    }
}
